﻿using BCCommon;
using BCCommon.Enums;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;

namespace BCDto.Sim.Admin.Admin
{
    /// <summary>
    /// 员工修改信息
    /// </summary>
    public class AdminPutDto
    {
        /// <summary>
        /// 员工Id
        /// </summary>
        [Display(Name = "员工Id")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int AdminId { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 姓名
        /// </summary>
        [Display(Name = "姓名")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [StringLength(16, ErrorMessage = "{0} 长度为 {2} 到 {1} 个字符", MinimumLength = 2)]
        public string FullName { get; set; }
        /// <summary>
        /// 账号状态
        /// </summary> 
        [Display(Name = "账号状态")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public AccountStatus Status { get; set; }
        /// <summary>
        /// 员工头像
        /// </summary>
        [Display(Name = "员工头像")]
        public string Avatar { get; set; }
        /// <summary>
        /// 手机号
        /// </summary>	
        [Display(Name = "手机号")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [RegularExpression(RegexPatterns.PHONE, ErrorMessage = "{0} 应为11位中国运营商手机号")]
        public string Phone { get; set; }
        /// <summary>
        /// 家庭住址
        /// </summary>	
        [Display(Name = "家庭住址")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [StringLength(200, ErrorMessage = "{0} 长度为 {2} 到 {1} 个字符", MinimumLength = 2)]
        public string HomeAddress { get; set; }
        /// <summary>
        /// 身份证号
        /// </summary>	
        [Display(Name = "身份证号")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [RegularExpression(RegexPatterns.ID_CARD, ErrorMessage = "{0} 应为18位中国公民有效身份证号")]
        public string IdCard { get; set; }
        /// <summary>
        /// 性别
        /// </summary>	
        [Display(Name = "性别")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public Sex Sex { get; set; }

        /// <summary>
        /// 已婚
        /// </summary>	
        [Display(Name = "已婚")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public bool Married { get; set; }
        /// <summary>
        /// 子女数量
        /// </summary>
        [Display(Name = "子女数量")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int ChildrenNumber { get; set; }
        /// <summary>
        /// 紧急联系人
        /// </summary>	
        [Display(Name = "紧急联系人")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [StringLength(30, ErrorMessage = "{0} 长度为 {2} 到 {1} 个字符", MinimumLength = 2)]
        public string EmergencyContact { get; set; }
        /// <summary>
        /// 紧急联系电话
        /// </summary>	
        [Display(Name = "紧急联系电话")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [RegularExpression(RegexPatterns.PHONE, ErrorMessage = "{0} 应为11位中国运营商手机号")]
        public string EmergencyPhone { get; set; }
        /// <summary>
        /// 家庭成员数
        /// </summary>	
        [Display(Name = "家庭成员数")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int FamilyNumber { get; set; }
        /// <summary>
        /// 教育程度
        /// </summary>	
        [Display(Name = "教育程度")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public EducationDegree Education { get; set; }
        /// <summary>
        /// 学校名称
        /// </summary>	
        [Display(Name = "学校名称")]
        public string School { get; set; }
        /// <summary>
        /// 毕业时间
        /// </summary>	
        [Display(Name = "毕业时间")]
        public DateTime? GraduationTime { get; set; }
        /// <summary>
        /// 工作年限
        /// </summary>	
        [Display(Name = "工作年限")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public decimal WorkingYears { get; set; }
        /// <summary>
        /// 英语等级
        /// </summary>	
        [Display(Name = "英语等级")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public EnglishLevel EnglishLevel { get; set; }
        /// <summary>
        /// 实习生
        /// </summary>	
        [Display(Name = "实习生")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public bool Trainee { get; set; }
        /// <summary>
        /// 公司Id
        /// </summary>	
        [Display(Name = "公司Id")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int CompanyId { get; set; }

        /// <summary>
        /// 部门Id
        /// </summary>	
        [Display(Name = "部门Id")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int DepartmentId { get; set; }
        /// <summary>
        /// 岗位名称
        /// </summary>
        [Display(Name = "岗位名称")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [StringLength(50, ErrorMessage = "{0} 长度为 {2} 到 {1} 个字符", MinimumLength = 2)]
        public string JobDuty { get; set; }
        /// <summary>
        /// 岗位名称Key
        /// </summary>
        [Display(Name = "岗位名称")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public string JobDutyKey { get; set; }
        /// <summary>
        /// 职位名称
        /// </summary>
        [Display(Name = "职位名称")]
        [Required(ErrorMessage = "{0} 不能为空")]
        [StringLength(50, ErrorMessage = "{0} 长度为 {2} 到 {1} 个字符", MinimumLength = 2)]
        public string JobTitle { get; set; }
        /// <summary>
        /// 职位名称Key
        /// </summary>
        [Display(Name = "职位名称")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public string JobTitleKey { get; set; }
        /// <summary>
        /// 职业等级
        /// </summary>	
        [Display(Name = "职业等级")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int JobLevel { get; set; }
        /// <summary>
        /// 入职时间
        /// </summary>	
        [Display(Name = "入职时间")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public DateTime EmployedDate { get; set; }
        /// <summary>
        /// 离职时间
        /// </summary>	
        [Display(Name = "离职时间")]
        public DateTime? LeaveTime { get; set; }
        /// <summary>
        /// 英文阅读能力级别
        /// </summary>	
        [Display(Name = "英文阅读能力级别")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int EnglishReadLevel { get; set; }
        /// <summary>
        /// 英文写作能力级别
        /// </summary>	
        [Display(Name = "英文写作能力级别")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int EnglishWriteLevel { get; set; }
        /// <summary>
        /// 英文对话能力级别
        /// </summary>
        [Display(Name = "英文对话能力级别")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int EnglishConversationLevel { get; set; }
        /// <summary>
        /// 薪资
        /// </summary>	
        [Display(Name = "薪资")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public decimal Salary { get; set; }
        /// <summary>
        /// 是否全职
        /// </summary>	
        [Display(Name = "是否全职")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public bool FullTime { get; set; }
        /// <summary>
        /// 薪资卡编号
        /// </summary>	
        [Display(Name = "薪资卡编号")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public string SalaryCard { get; set; }
        /// <summary>
        /// 产假中
        /// </summary>	
        [Display(Name = "产假中")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public bool MaternityLeave { get; set; }
        /// <summary>
        /// 产假开始时间
        /// </summary>	
        [Display(Name = "产假开始时间")]
        public DateTime? MaternityLeaveStartTime { get; set; }
        /// <summary>
        /// 产假结束时间
        /// </summary>	
        [Display(Name = "产假结束时间")]
        public DateTime? MaternityLeaveEndTime { get; set; }
        /// <summary>
        /// 产假薪资
        /// </summary>	
        [Display(Name = "产假薪资")]
        public decimal? MaternityLeaveSalary { get; set; }
        /// <summary>
        /// 年假天数
        /// </summary>	
        [Display(Name = "年假天数")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int AnnualLeave { get; set; }
        /// <summary>
        /// 剩余年假天数
        /// </summary>	
        [Display(Name = "剩余年假天数")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public int SurplusAnnualLeave { get; set; }
        /// <summary>
        /// 外派中
        /// </summary>	
        [Display(Name = "外派中")]
        [Required(ErrorMessage = "{0} 不能为空")]
        public bool Assignment { get; set; }
        /// <summary>
        /// 外派每日津贴
        /// </summary>	
        [Display(Name = "外派每日津贴")]
        public decimal? AssignmentSubsidy { get; set; }
        /// <summary>
        /// 外派开始时间
        /// </summary>	
        [Display(Name = "外派开始时间")]
        public DateTime? AssignmentStartTime { get; set; }
        /// <summary>
        /// 外派结束时间
        /// </summary>	
        [Display(Name = "外派结束时间")]
        public DateTime? AssignmentEndTime { get; set; }
        /// <summary>
        /// 个人喜好
        /// </summary>
        [Display(Name = "喜好")]
        public string Preference { get; set; }


        /// <summary>
        /// 保证金金额
        /// </summary>
        [Display(Name = "保证金金额")]
        public decimal? SecurityAmount { get; set; }

        /// <summary>
        /// 已付保证金金额
        /// </summary>
        [Display(Name = "已付保证金金额")]
        public decimal? PaidSecurityAmount { get; set; }



        /// <summary>
        /// 子女教育专项附加扣除金额
        /// </summary>
        [Display(Name = "子女教育专项附加扣除金额")]
        public decimal? ChildrenEducationCutAmount { get; set; }

        /// <summary>
        /// 子女教育专项开始日期
        /// </summary> 
        [Display(Name = "子女教育专项开始日期")]
        public DateTime? ChildrenEducationStartDate { get; set; }

        /// <summary>
        /// 子女教育专项结束日期
        /// </summary>
        [Display(Name = "子女教育专项结束日期")]
        public DateTime? ChildrenEducationEndDate { get; set; }

        /// <summary>
        /// 继续教育专项附加扣除金额
        /// </summary>
        [Display(Name = "继续教育专项附加扣除金额")]
        public decimal? ContinueEducationCutAmount { get; set; }

        /// <summary>
        /// 继续教育专项开始日期
        /// </summary>
        [Display(Name = "继续教育专项开始日期")]
        public DateTime? ContinueEducationStartDate { get; set; }

        /// <summary>
        /// 继续教育专项结束日期
        /// </summary>
        [Display(Name = "继续教育专项结束日期")]
        public DateTime? ContinueEducationEndDate { get; set; }

        /// <summary>
        /// 大病医疗专项附加扣除金额
        /// </summary>
        [Display(Name = "大病医疗专项附加扣除金额")]
        public decimal? MedicalCutAmount { get; set; }

        /// <summary>
        /// 住房贷款利息专项附加扣除金额
        /// </summary>
        [Display(Name = "住房贷款利息专项附加扣除金额")]
        public decimal? HomeLoanCutAmount { get; set; }

        /// <summary>
        /// 住房租金专项附加扣除金额
        /// </summary>
        [Display(Name = "住房租金专项附加扣除金额")]
        public decimal? HomeRentCutAmount { get; set; }

        /// <summary>
        /// 赡养老人专项附加扣除金额
        /// </summary>
        [Display(Name = "赡养老人专项附加扣除金额")]
        public decimal? ElderlyCareCutAmount { get; set; }

    }
}
